package demo1;

import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 邓大帅
 * Date: 2024-01-19
 * Time: 15:22
 */
//写数据结构的算法题一定要会画图
public class Test {
    public static void main(String[] args) {
//        1.Map是一个接口，不能直接实例化，用的时候可以实例化TreeMap和HashMap
//        2.Map中key是唯一的，重复插入key值相同的数据，value会更新
//        3.TreeMap插入的数据key不能为null，否则会报空指针异常，value可以为空。HashMap不同，key和value均可为空
//        4.Map中的key不能直接修改，value可以修改
//        5.Map无法通过迭代器遍历，Set提供了迭代器的方法，若以可以通过迭代器遍历
//        迭代器是Iterable接口的方法，Map是单独的接口，并没有扩展Iterable接口，所以Map没有迭代器方法
//        6.TreeSet底层是用TreeMap实现的，value为默认值，每个数据都相同
//        7.Set最大的功能就是去重
//        8.Set的key不能删除
//        9.TreeSet插入的数据key不能为null，否则会报空指针异常，HashSet可以。
//        10.Java的负载因子默认是0.75
//        11.开散列当链表长>=8，数组长>=64时，就会把链表改成红黑树
//        12.jdk1.8开始，开散列的链表是尾插法插入数据
//        13.hashCode方法用于不是整数类型的数据生成一个整数，方便后面定址
//        14.要做到equals相等的对象，hashcode一定是一致的
//        15.Java的HashMap内部会把你要求的数组容量变为比你要求容量大的最接近的2的次幂数，因为这样当（n-1）& hashCode = hash % n
//        这样可以提高效率，因为底层cpu进行位运算更快
//        String类下的intern方法可以手动入池
//        枚举很安全，类外无法反射枚举对象

    }
}
